home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 20 / Cream of the Crop 20 (Terry Blount) (1996).iso / program / n_b_v203.zip / RODENTS.TXT < prev    next >
Text File  |  1996-07-04  |  8KB  |  126 lines

  1. $if 0
  2.     ┌──────────────────────────╖                        PowerBASIC v3.20
  3.  ┌──┤          DASoft          ╟──────────────────────┬──────────────────╖
  4.  │  ├──────────────────────────╢    Copyright 1995    │ DATE: 1995-10-01 ╟─╖
  5.  │  │ FILE NAME   RODENTS .TXT ║          by          ╘════════════════─ ║ ║
  6.  │  │                          ║  Don Schullian, Jr.                     ║ ║
  7.  │  ╘══════════════════════════╝                                         ║ ║
  8.  │ A license is hereby granted to the holder to use this source code in  ║ ║
  9.  │ any program, commercial or otherwise,  without receiving the express  ║ ║
  10.  │ permission of the copyright holder and without paying any royalties,  ║ ║
  11.  │ as long as this code is not distributed in any compilable format.     ║ ║
  12.  │  IE: source code files, PowerBASIC Unit files, and printed listings   ║ ║
  13.  ╘═╤═════════════════════════════════════════════════════════════════════╝ ║
  14.    │                ....................................                   ║
  15.    ╘═══════════════════════════════════════════════════════════════════════╝
  16. $endif
  17.  
  18. "Rodentcia Tecknikus" seems to have infected almost every corner of the soft-
  19. ware market today whether it is needed, efficient, or not! To that end I must
  20. speak, for just a moment. The mouse is, in reality, a great pointing and
  21. selecting device. It does have limitations and any attempt to exceed those
  22. limitations puts an unnecessary burden on the tool. Also one has to take
  23. into account the tool's purpose in life and not use the it where it is not
  24. efficient.
  25.  
  26. The mouse is restricted to moving a pointer around the screen, keeping track
  27. of where it is, and reporting on the status of any key or keys. A key can be
  28. "up", "down" or "clicked" ( was down is now up ). Each key has a number:
  29.                     ┌────────┬────────┬────────┐
  30.                     │   #1   │   #3   │   #2   │
  31.                     │        │        │        │
  32.                     \        │        │        /
  33.                      ├───────┴────────┴───────┤   fig: #7342
  34.                      │                        │   Rodentcia Tecknikus
  35.                                                      Tributtonous
  36. Some mice have 2 keys and some have 3. If the mouse has only 2 buttons it
  37. can simulate a 3 button mouse if the user presses/releases the 2 buttons
  38. simultaneous but it is a human impossibility to "beat the machine" and
  39. get the buttons down or up together fast enough to get the desired results.
  40. Also, the "double-click" is not a feature of the mouse and must be
  41. programmed by pausing the program after the first "click" then checking to
  42. see if a second "click" happened within both the allotted time and area of
  43. the screen. In short, try to keep things down to 2 buttons and one click as
  44. much as possible and your programs will be shorter and easier to manage.
  45.  
  46. Before the mouse is turned on (made visible) you have to initiate the mouse
  47. to make sure you're actually infested or not! Once the little guy is visible
  48. you can turn him on and off at will BUT.... for very time you turn him off
  49. you have to turn him on again before he's visible. In other words 3 "offs"
  50. need 3 "ons" and NOWHERE is there a function that supports the number of
  51. "offs" in the system so I've done it manually and that leads us to the
  52. conditional off function. You can tell DOS to turn the rat off if it is or
  53. goes inside a "box". Great idea but.....
  54.   1) it doesn't work all the time due to interrupt time!
  55.      ie: you update the screen before the mouse checks if it is in the box.
  56.   2) you have NO WAY of knowing if the mouse was turned off or not!
  57.      ie: how many "ons" do you need now?
  58.  
  59.   ┌────
  60.   │ HINT
  61.   ├───────────────────────────────────────────────────────────────────────┐
  62.   │  MouseON and MouseOFF keep an internal record of how many OFF's there │
  63.   │  are so MouseONnow can issue enough ON's to get the cursor visible.   │
  64.   │  If you have a routine that calls MouseON and MouseOFF with no chance │
  65.   │  of another routine coming in between the two then the fastest and    │
  66.   │  tightest code is:                                                    │
  67.   │                       asm  mov  ax,&h02         ; mouse off           │
  68.   │                       asm  int  &h33                                  │
  69.   │                       ' code goes here                                │
  70.   │                       asm  mov  ax,&h01         ; mouse off           │
  71.   │                       asm  int  &h33                                  │
  72.   │  in Basic:                                                            │
  73.   │                        REG 1, 2                                       │
  74.   │                        CALL INTERRUPT &h33                            │
  75.   │                        ' code goes here                               │
  76.   │                        REG 1, 1                                       │
  77.   │                        CALL INTERRUPT &h33                            │
  78.   │                                                                       │
  79.   │  There is a conditional mouse OFF that turns the mouse off            │
  80.   │  a) if it is inside the box you will be updating                      │
  81.   │  b) if the mouse moves inside the box                                 │
  82.   │  BUT..................                                                │
  83.   │  a) you don't know and can't find out if the mouse was, in fact,      │
  84.   │     turned off and if the conditional OFF is nested with other OFF/ON │
  85.   │     combos you could very easily get the mouse back on before it was  │
  86.   │     time.                                                             │
  87.   │  b) if the screen under the mouse is updated before the mouse         │
  88.   │     interrupt catches the fact that the mouse has moved into the box  │
  89.   │     then the screen is left in an ugly state!                         │
  90.   │  HENCE................                                                │
  91.   │  It is best, especially with today's super quick computers, to simply │
  92.   │  issue an OFF/ON and let the rodent flicker a bit.                    │
  93.   └───────────────────────────────────────────────────────────────────────┘
  94.  
  95. Just to make things worse there are a whole flock of different drivers out
  96. there! If you finally find a function that does what you want it to do you
  97. have to check to make sure that the mouse driver that has been loaded into
  98. the system supports the function. This, basically, negates generic use of
  99. these third party functions, so just forget them!
  100.  
  101. Does it seem that I'm down on the mouse?! Well, not really. Like I said at
  102. the beginning: "It's got it's place." The trick is to use it correctly and
  103. wisely and not attempt to overwork it. After all, it's only a mouse! The
  104. most useless place I've ever seen a mouse is in a word processor! What
  105. typist in their right mind wants to remove her/his hands from the home keys
  106. in the middle of a document? Ditto for data input. When <ENTER> and <TAB>
  107. are so handy, why grope for a mouse to move to the next field?....
  108.  
  109. Now... on to the good part.........
  110.  
  111. We've got the mouse running around, playing hide and seek and clicking at us
  112. all the while. How do we put this to use? Not too tough, once you've thought
  113. about it.
  114.  
  115. Each time the mouse clicks we have a look at where it's at, test to see if
  116. it's location means anything to the routine then take action. Simple enough
  117. until you start getting boxes popping up "over" other boxes, etc. Now what
  118. do you do? The screen is, after all, only 2 dimensional!
  119.  
  120. An area of the screen we will call an EVENT
  121. Each event will have one, or more, ITEMs inside it
  122. Event and item corners will be stored in 2 dimensional arrays
  123. These arrays will be fed into fEventOpenG? or fEventOpenT?
  124.  
  125. GOTO EVENTS.TXT
  126.